package com.erp.entity.sale;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.erp.entity.goods.Goods;
import com.erp.entity.information.Client;
import com.erp.remote.sale.goods.vo.GoodsPrice;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @description: 报价单实体类
 * @author: lyj
 * @date: 2025/6/30
**/
public class Quotation {
    @ExcelIgnore
    private Integer id;

    @ExcelProperty(value = "单据编号")
    @ColumnWidth(value = 40)
    private String quotationNumber;//报价单编号
    @ExcelIgnore
    private Integer customerId;//客户id
    @ExcelIgnore
    private String contactName;//客户联系人
    @ExcelProperty(value = "报价主体")
    @ColumnWidth(20)
    private String customerName;//报价主体名称
    @ExcelIgnore
    private Integer employeeId;//销售人员id
    @ExcelIgnore
    private Integer quotationType;//报价类型：1为客户 2为客户类别 3为客户等级
    @ExcelProperty(value = "日期",index = 2)
    @ColumnWidth(20)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date receiptDate;//单据日期
    @ExcelProperty(value = "有效开始时间",index = 3)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date effectiveStartDate;//有效开始日期
    @ExcelProperty(value = "有效结束时间",index = 4)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date effectiveEndDate;//有效结束日期

    @ExcelIgnore
    private Integer quoteStatus;//报价单状态
    @ExcelIgnore

    private Integer effectiveStatus;//生效状态
    @ExcelIgnore
    private Integer makerId;//制单人ID



    private Integer quotationGoodsNum;//报价单商品总数量

    private BigDecimal quotationGoodsAmount;//报价单商品总金额
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createDate;//报价单创建时间
    @ExcelIgnore
    private Integer examinerId;//审核人ID

    @ExcelProperty(value = "交货方式")
    @ColumnWidth(10)
    private Integer deliveryTypeId;//交货方式
    @ExcelProperty(value = "收款条件")
    @ColumnWidth(10)
    private Integer receivePayTypeId;//收款条件
    @ExcelIgnore
    private Integer isExamined;//是否审核
    @ExcelIgnore
    private Integer companyId;//公司ID
    @ExcelProperty(value = "备注")
    private String remarks;//备注
    @ExcelIgnore
    private Integer isDelete;


    //---------------------冗余字段-------------------
    @ExcelIgnore
    private List<String> linkSaleNumberList;
    @ExcelIgnore
    private List<String> linkSaleOrderNumberList;
    private String quotationTyName;//报价单类型名称
    private String customerAddress;//客户地址名称
    @ExcelProperty(value = "销售员",index = 5)
    @ColumnWidth(20)
    private String employeeName;//销售人员名称
    @JsonFormat(shape = JsonFormat.Shape.OBJECT, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date[] effectiveDate;//前端校验需要放在formdata中一起发送过来
    @ExcelProperty
    private List<QuotationDetail> quotationDetailList;//打印Excel时要用到

    public Quotation(){
        linkSaleNumberList = new ArrayList<>();
        linkSaleOrderNumberList = new ArrayList<>();
    }

    public List<String> getLinkSaleNumberList() {
        return linkSaleNumberList;
    }

    public void setLinkSaleNumberList(List<String> linkSaleNumberList) {
        this.linkSaleNumberList = linkSaleNumberList;
    }

    public List<String> getLinkSaleOrderNumberList() {
        return linkSaleOrderNumberList;
    }

    public void setLinkSaleOrderNumberList(List<String> linkSaleOrderNumberList) {
        this.linkSaleOrderNumberList = linkSaleOrderNumberList;
    }

    public List<QuotationDetail> getQuotationDetailList() {
        return quotationDetailList;
    }

    public Integer getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }

    public void setQuotationDetailList(List<QuotationDetail> quotationDetailList) {
        this.quotationDetailList = quotationDetailList;
    }

    public Date[] getEffectiveDate() {
        return effectiveDate;
    }

    public void setEffectiveDate(Date[] effectiveDate) {
        this.effectiveDate = effectiveDate;
    }

    public String getEmployeeName() {
        return employeeName;
    }

    public void setEmployeeName(String employeeName) {
        this.employeeName = employeeName;
    }

    public String getCustomerAddress() {
        return customerAddress;
    }

    public void setCustomerAddress(String customerAddress) {
        this.customerAddress = customerAddress;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getContactName() {
        return contactName;
    }

    public void setContactName(String contactName) {
        this.contactName = contactName;
    }



    public String getQuotationNumber() {
        return quotationNumber;
    }

    public void setQuotationNumber(String quotationNumber) {
        this.quotationNumber = quotationNumber;
    }

    public Integer getCustomerId() {
        return customerId;
    }

    public void setCustomerId(Integer customerId) {
        this.customerId = customerId;
    }

    public Integer getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }

    public Integer getQuotationType() {
        return quotationType;
    }

    public void setQuotationType(Integer quotationType) {
        this.quotationType = quotationType;
    }

    public Date getReceiptDate() {
        return receiptDate;
    }

    public void setReceiptDate(Date receiptDate) {
        this.receiptDate = receiptDate;
    }

    public Date getEffectiveStartDate() {
        return effectiveStartDate;
    }

    public void setEffectiveStartDate(Date effectiveStartDate) {
        this.effectiveStartDate = effectiveStartDate;
    }

    public Date getEffectiveEndDate() {
        return effectiveEndDate;
    }

    public void setEffectiveEndDate(Date effectiveEndDate) {
        this.effectiveEndDate = effectiveEndDate;
    }

    public Integer getQuoteStatus() {
        return quoteStatus;
    }

    public void setQuoteStatus(Integer quoteStatus) {
        this.quoteStatus = quoteStatus;
    }

    public Integer getEffectiveStatus() {
        return effectiveStatus;
    }

    public void setEffectiveStatus(Integer effectiveStatus) {
        this.effectiveStatus = effectiveStatus;
    }

    public Integer getMakerId() {
        return makerId;
    }

    public void setMakerId(Integer makerId) {
        this.makerId = makerId;
    }

    public Integer getQuotationGoodsNum() {
        return quotationGoodsNum;
    }

    public void setQuotationGoodsNum(Integer quotationGoodsNum) {
        this.quotationGoodsNum = quotationGoodsNum;
    }

    public BigDecimal getQuotationGoodsAmount() {
        return quotationGoodsAmount;
    }

    public void setQuotationGoodsAmount(BigDecimal quotationGoodsAmount) {
        this.quotationGoodsAmount = quotationGoodsAmount;
    }

    public Date getCreateDate() {
        return createDate;
    }


    public void setCreateDate(Date createDate) {
        this.createDate = createDate;
    }

    public Integer getExaminerId() {
        return examinerId;
    }

    public void setExaminerId(Integer examinerId) {
        this.examinerId = examinerId;
    }

    public Integer getDeliveryTypeId() {
        return deliveryTypeId;
    }

    public void setDeliveryTypeId(Integer deliveryTypeId) {
        this.deliveryTypeId = deliveryTypeId;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getQuotationTyName() {
        return quotationTyName;
    }

    public void setQuotationTyName(String quotationTyName) {
        this.quotationTyName = quotationTyName;
    }

    public Integer getReceivePayTypeId() {
        return receivePayTypeId;
    }

    public void setReceivePayTypeId(Integer receivePayTypeId) {
        this.receivePayTypeId = receivePayTypeId;
    }

    public Integer getIsExamined() {
        return isExamined;
    }

    public void setIsExamined(Integer isExamined) {
        this.isExamined = isExamined;
    }

    public Integer getCompanyId() {
        return companyId;
    }

    public void setCompanyId(Integer companyId) {
        this.companyId = companyId;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }

}